package com.code.p9.单列模式;

/**
 * 描述: describe
 *
 * @author CodeYang_Site
 * @version 2021/6/5 21:17
 */
public class 单列模式 {
    /**
     * 饿汉式
     */
//    public static void main(String[] args) {
//        HungrySingleton instance1 = HungrySingleton.getInstance();
//        HungrySingleton instance2 = HungrySingleton.getInstance();
//        System.out.println(instance1);
//        System.out.println(instance2);
//        System.out.println(instance1 == instance2);
//    }

    /**
     * 多线程下不安全,因为多线程并发操作下可能会产生多个实例对象
     *  LazyMan.getInstance(); 不是原子性的，同一时刻可以由多个线程同时访问，可能会造成多个实例
     * <p>
     * 懒汉式
     */
//    public static void main(String[] args) {
//        LazyMan instance1 = LazyMan.getInstance();
//        LazyMan instance2 = LazyMan.getInstance();
//        System.out.println(instance1);
//        System.out.println(instance2);
//        System.out.println(instance1 == instance2);
//
//    }


    /**
     * 保证线程安全的饿汉式单列模式有很多种实现方式
     * 1加锁
     * 2不加锁的 静态内部类
     *
     * @param args
     */
    public static void main(String[] args) {
        SafeThreadSingleton instance1 = SafeThreadSingleton.getInstance();
        SafeThreadSingleton instance2 = SafeThreadSingleton.getInstance();
        System.out.println(instance1);
        System.out.println(instance2);
        System.out.println(instance1 == instance2);

    }

}
